// https://www.nowcoder.com/practice/acead2f4c28c401889915da98ecdc6bf?tpId=230&tqId=2021480&ru=/exam/oj&qru=/ta/dynamic-programming/question-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D196
// #include <iostream>
// #include <vector>
// using namespace std;
// //注意下标从一开始 为什么? 为了处理边界情况
// //前缀和 快速的得出某连续一个区间的和
// //先预处理一个前缀和数组，然后再使用前缀和数组

// #include <iostream>
// #include<vector>
//     using namespace std;

//     int main() {
//         int  n = 0, q = 0;
//         cin >> n >> q;
//         vector<int> arr(n, 0);
//         for (auto& e : arr) {
//             cin >> e;
//         }
//         vector<vector<int>> vv(q, vector<int>(2));
//         for (auto& e : vv) {
//             cin >> e[0] >> e[1];
//         }
//         //初始化前缀和数组
//         vector<long long> dp(n + 1); //使用long long 避免存储不进去
//         dp[0] = 0;
//         for (int i = 1; i <= arr.size(); i++) {
//             dp[i] = dp[i - 1] + arr[i - 1];
//         }
//         //使用前缀和数组
//         for (int i = 0; i < vv.size(); i++) {
//             cout << dp[vv[i][1]] - dp[vv[i][0] - 1] << endl;
//         }
//         return 0;
//     }